package com.brightgenerous.niconama02.stage;

import java.net.URL;

import com.brightgenerous.niconama02.stage.Moment.Type;

/**
 * <p>
 * 舞台
 * </p>
 * <p>
 * 舞台の公演をおこなう存在<br>
 * start(Audience)メソッドの実装そのものが脚本になる
 * </p>
 * 
 * @author brigen
 */
public abstract class Stage {

	/**
	 * 特定の瞬間の映像・音声情報を生成する
	 *
	 * @param x_picture 映像
	 * @param x_scene 場面
	 * @param x_sound 音
	 * @param x_face 顔
	 * @param x_name 名前
	 * @param x_voice 声
	 */
	protected static Moment createMoment(URL x_picture, String x_scene, String x_sound, URL x_face, String x_name, String x_voice) {
		return new Moment(Type.BOTH, x_picture, x_scene, x_sound, x_face, x_name, x_voice);
	}

	/**
	 * 特定の瞬間の映像・音声情報を生成する
	 *
	 * @param x_picture 映像
	 * @param x_scene 場面
	 * @param x_sound 音
	 */
	protected static Moment createSceneMoment(URL x_picture, String x_scene, String x_sound) {
		return new Moment(Type.SCENE, x_picture, x_scene, x_sound, null, null, null);
	}

	/**
	 * 特定の瞬間の映像・音声情報を生成する
	 *
	 * @param x_face 顔
	 * @param x_name 名前
	 * @param x_voice 声
	 */
	protected static Moment createActorMoment(URL x_face, String x_name, String x_voice) {
		return new Moment(Type.FACE, null, null, null, x_face, x_name, x_voice);
	}

	/**
	 * 公演を開始する
	 * 
	 * @param x_audience 聴衆
	 */
	public abstract void start(Audience x_audience);
}
